package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Println(Foo2())
	// time.Sleep(4 * time.Second)
	runtime.GC()
	fmt.Println("结束")
}

func Foo() {
	var a = 122345
	runtime.SetFinalizer(&a, func(*int) {
		fmt.Println("发生了回收")
	})
	runtime.GC()
}

func Foo2() *int {
	var a = 122345
	runtime.SetFinalizer(&a, func(*int) {
		fmt.Println("发生了回收")
	})
	return &a
}

/* 生命周期
内存结构的生命周期 -- 分配 使用与释放
资源对象的生命周期 -- 创建与释放
*/
// 可以使用析构函数,来作为对象生命周期结束时候的回调
// func SetFinalizer(obj interface{}, finalizer interface{})
// obj需要为指针类型 , finalizer 需要是一个函数,并且参数为obj的类型,无返回值
